package com.allen.study.application.api.assembler;

import com.allen.study.application.api.assembler.mapper.IDepartmentDTOStructMapper;
import com.allen.study.application.api.request.DepartmentCreateRequest;
import com.allen.study.application.api.request.DepartmentQueryRequest;
import com.allen.study.application.api.request.DepartmentUpdateRequest;
import com.allen.study.application.api.response.DepartmentQueryResponse;
import com.allen.study.application.api.response.DepartmentResponse;
import com.allen.study.domain.entity.Department;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 部门信息表类型转换器
 *
 * @author AllenSun
 * @since 2025-04-23 20:46
 */
@Component
public class DepartmentDTOAssembler {

    /**
     * 部门信息表创建请求数据传输对象 转 部门信息表实体
     *
     * @param createRequest 部门信息表创建请求数据传输对象
     * @return 部门信息表实体
     */
    public Department assembler(DepartmentCreateRequest createRequest) {
        //领域模型 自行实现 entity组装工厂类 (domian层提供)
        return IDepartmentDTOStructMapper.INSTANCE.fromCreateRequest(createRequest);
    }

    /**
     * 部门信息表更新请求数据传输对象 转 部门信息表实体
     *
     * @param updateRequest 部门信息表更新请求数据传输对象
     * @return 部门信息表实体
     */
    public Department assembler(DepartmentUpdateRequest updateRequest) {
        //领域模型 自行实现 entity组装工厂类 (domian层提供)
        return IDepartmentDTOStructMapper.INSTANCE.fromUpdateRequest(updateRequest);
    }

    /**
     * 部门信息表查询请求数据传输对象 转 部门信息表实体
     *
     * @param queryRequest 部门信息表查询请求数据传输对象
     * @return 部门信息表实体
     */
    public Department assembler(DepartmentQueryRequest queryRequest) {
        //领域模型 自行实现 entity组装工厂类 (domian层提供)
        return IDepartmentDTOStructMapper.INSTANCE.fromQueryRequest(queryRequest);
    }

    /**
     * 部门信息表实体 转 部门信息表响应数据传输对象
     *
     * @param department 部门信息表实体
     * @return 部门信息表响应数据传输对象
     */
    public DepartmentResponse toResponse(Department department) {
        return IDepartmentDTOStructMapper.INSTANCE.toResponse(department);
    }

    /**
     * 部门信息表实体 转 部门信息表查询响应数据传输对象
     *
     * @param department 部门信息表实体
     * @return 部门信息表查询响应数据传输对象
     */
    public DepartmentQueryResponse toQueryResponse(Department department) {
        return IDepartmentDTOStructMapper.INSTANCE.toQueryResponse(department);
    }

    /**
     * 部门信息表实体列表 转 部门信息表查询响应数据传输对象列表
     *
     * @param departmentList 部门信息表实体列表
     * @return 部门信息表查询响应数据传输对象列表
     */
    public List<DepartmentQueryResponse> toQueryResponse(List<Department> departmentList) {
        return IDepartmentDTOStructMapper.INSTANCE.toQueryResponse(departmentList);
    }
}
